home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 10868 / 10868.xpi / chrome / sync.jar / content / preferences / fx-setup.js < prev    next >
Text File  |  2010-02-02  |  9KB  |  296 lines

  1. const Ci = Components.interfaces;
  2. const Cc = Components.classes;
  3. const Cr = Components.results;
  4.  
  5. var gWeaveSetup = {
  6.   _captchaChallenge: "",
  7.   get _usingMainServers() {
  8.     return document.getElementById("serverType").selectedItem.value == "main";
  9.   },
  10.  
  11.   status: { username: false, password: false, email: false, server: false},
  12.  
  13.   get captchaBrowser() {
  14.     delete this.captchaBrowser;
  15.     return this.captchaBrowser =document.getElementById("captcha");
  16.   },
  17.  
  18.   get bundle() {
  19.     delete this.bundle;
  20.     return this.bundle = document.getElementById("weavePrefStrings");
  21.   },
  22.  
  23.   get wizard() {
  24.     delete this.wizard;
  25.     return this.wizard = document.getElementById("accountSetup");
  26.   },
  27.  
  28.   init: function () {
  29.     this.wizard.canAdvance = false;
  30.     if (this._checkForNoScript())
  31.       document.getElementById("noScriptWarning").hidden = false;
  32.  
  33.     this.wizard.getButton("finish").label = this.bundle.getString("startSyncing.label");
  34.     this.onServerChange();
  35.     this.captchaBrowser.addProgressListener(this);
  36.   },
  37.  
  38.   _checkForNoScript: function() {
  39.     let ns = Application.extensions.get("{73a6fe31-595d-460b-a920-fcc0f8843232}");
  40.     if (ns == null)
  41.       return false;
  42.     return ns.enabled;
  43.   },
  44.  
  45.   updateSyncPrefs: function () {
  46.     let syncEverything = document.getElementById("weaveSyncMode").selectedItem.value == "syncEverything";
  47.     document.getElementById("syncModeOptions").selectedIndex = syncEverything ? 0 : 1;
  48.  
  49.     if (syncEverything) {
  50.       document.getElementById("engine.bookmarks").checked = true;
  51.       document.getElementById("engine.passwords").checked = true;
  52.       document.getElementById("engine.history").checked   = true;
  53.       document.getElementById("engine.tabs").checked      = true;
  54.       document.getElementById("engine.prefs").checked     = true;
  55.     }
  56.   },
  57.  
  58.   // fun with validation!
  59.   checkFields: function () {
  60.     this.wizard.canAdvance = this.readyToAdvance();
  61.   },
  62.  
  63.   readyToAdvance: function () {
  64.     switch (this.wizard.currentPage.pageIndex) {
  65.       case 0: // first page
  66.         for (i in this.status) {
  67.           if (!this.status[i])
  68.             return false;
  69.         }
  70.         if (this._usingMainServers)
  71.           return document.getElementById("tos").checked;
  72.  
  73.         return true;
  74.       case 1:
  75.         return true;
  76.       case 2:
  77.         return this.onPassphraseChange();
  78.     }
  79.     throw "epic fail, we should never get here";
  80.   },
  81.  
  82.   onUsernameChange: function () {
  83.     let feedback = document.getElementById("usernameFeedbackRow");
  84.     let val = document.getElementById("weaveUsername").value
  85.     let available = val == "" || Weave.Service.checkUsername(val) == "available";
  86.  
  87.     let str = available ? "" : "usernameNotAvailable.label";
  88.     this._setFeedbackMessage(feedback, available, str);
  89.  
  90.     this.status.username = available;
  91.     this.checkFields();
  92.   },
  93.  
  94.   onPasswordChange: function () {
  95.     let valid = true;
  96.     let feedback = document.getElementById("passwordFeedbackRow");
  97.  
  98.     let password = document.getElementById("weavePassword").value;
  99.     if (password.length < 8) {
  100.       valid = false;
  101.       this._setFeedbackMessage(feedback, valid, "passwordTooWeak.label");
  102.     }
  103.  
  104.     let pwconfirm = document.getElementById("weavePasswordConfirm").value;
  105.     if (valid && pwconfirm && password != pwconfirm) {
  106.       valid = false;
  107.       this._setFeedbackMessage(feedback, valid, "passwordMismatch.label");
  108.     }
  109.  
  110.     if (valid && pwconfirm)
  111.       this._setFeedbackMessage(feedback, valid);
  112.  
  113.     this.status.password = valid;
  114.     this.checkFields();
  115.   },
  116.  
  117.   onEmailChange: function () {
  118.     let re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  119.     this.status.email = re.test(document.getElementById("weaveEmail").value);
  120.     this.checkFields();
  121.   },
  122.  
  123.   onPassphraseChange: function () {
  124.     // state values: 0 = valid, 1 = invalid, no warn, 2 = invalid, warn
  125.     let state = 0;
  126.     let str = null;
  127.     let val = document.getElementById("weavePassphrase").value;
  128.     let valConfirm = document.getElementById("weavePassphraseConfirm").value;
  129.   
  130.     if (val == document.getElementById("weavePassword").value) {
  131.       str = "cannotMatchPassword.label";
  132.       state = 2;
  133.     }
  134.  
  135.     if (state == 0 && (val.length < 12 || valConfirm.length < val.length))
  136.       state = 1;
  137.  
  138.     if (state == 0 && val != valConfirm) {
  139.       str = "entriesMustMatch.label";
  140.       state = 2;
  141.     }
  142.  
  143.     let feedback = document.getElementById("passphraseFeedbackRow");
  144.     let success = state != 2;
  145.     this._setFeedbackMessage(feedback, success, str);
  146.     return state == 0;
  147.   },
  148.  
  149.   openToS: function () {
  150.     let url = Weave.Svc.Prefs.get("termsURL");
  151.     openUILinkIn(url, "tab");
  152.   },
  153.  
  154.   onPageShow: function() {
  155.     switch (this.wizard.currentPage.pageIndex) {
  156.       case 2:
  157.         this.wizard.canRewind = false;
  158.         this.wizard.canAdvance = false;
  159.         break;
  160.     }
  161.   },
  162.  
  163.   onWizardAdvance: function () {
  164.     if (!this.wizard.currentPage)
  165.       return true;
  166.  
  167.     switch (this.wizard.currentPage.pageIndex) {
  168.       case 0:
  169.         // time to load the captcha
  170.         this.captchaBrowser.loadURI(Weave.Service.miscAPI + "captcha_html");
  171.         break;
  172.       case 1:
  173.         this.startThrobber(true);
  174.         let username = document.getElementById("weaveUsername").value;
  175.         let password = document.getElementById("weavePassword").value;
  176.         let email    = document.getElementById("weaveEmail").value;
  177.         let response = this.captchaBrowser.contentDocument
  178.                            .getElementById("recaptcha_response_field").value;
  179.  
  180.         let error = Weave.Service.createAccount(username, password, email,
  181.                                                 this._captchaChallenge, response);
  182.         this.startThrobber(false);
  183.  
  184.         if (error == null) {
  185.           Weave.Service.username = username;
  186.           Weave.Service.password = password;
  187.           Weave.Service.persistLogin();
  188.           return true;
  189.         }
  190.  
  191.         // this could be nicer, but it'll do for now
  192.         Weave.Svc.Prompt.alert(window,
  193.                                this.bundle.getString("errorCreatingAccount.title"),
  194.                                Weave.Utils.getErrorString(error));
  195.         return false;
  196.       case 2:
  197.         Weave.Service.passphrase = document.getElementById("weavePassphrase").value;
  198.         Weave.Service.persistLogin();
  199.         break;
  200.     }
  201.     return true;
  202.   },
  203.  
  204.   onWizardFinish: function () {
  205.     function isChecked(element) {
  206.       return document.getElementById(element).hasAttribute("checked");
  207.     }
  208.  
  209.     let prefs = ["engine.bookmarks", "engine.passwords", "engine.history", "engine.tabs", "engine.prefs"];
  210.     for (let i = 0;i < prefs.length;i++) {
  211.       Weave.Svc.Prefs.set(prefs[i], isChecked(prefs[i]));
  212.     }
  213.  
  214.     window.opener.close();
  215.     Weave.Svc.Prefs.reset("firstSync");
  216.     Weave.Service.login();
  217.   },
  218.  
  219.   startThrobber: function (start) {
  220.     // FIXME: stubbed
  221.   },
  222.  
  223.   onServerChange: function () {
  224.     document.getElementById("serverRow").hidden = this._usingMainServers;
  225.     document.getElementById("TOSRow").hidden = !this._usingMainServers;
  226.     let valid = false;
  227.     let feedback = document.getElementById("serverFeedbackRow");
  228.  
  229.     if (this._usingMainServers) {
  230.       Weave.Svc.Prefs.reset("serverURL");
  231.       valid = true;
  232.       feedback.hidden = true;
  233.     }
  234.     else {
  235.       let urlString = document.getElementById("weaveServerURL").value;
  236.       let str = "";
  237.       if (urlString) {
  238.         let uri = Weave.Utils.makeURI(urlString);
  239.         if (uri) {
  240.           Weave.Service.serverURL = uri.spec;
  241.           valid = true;
  242.         }
  243.  
  244.         str = valid ? "" : "serverInvalid.label";
  245.         this._setFeedbackMessage(feedback, valid);
  246.       }
  247.       else
  248.         this._setFeedbackMessage(feedback, true);
  249.  
  250.     }
  251.  
  252.     // belt and suspenders-ish
  253.     if (!valid)
  254.       Weave.Svc.Prefs.reset("serverURL");
  255.  
  256.     this.status.server = valid;
  257.     this.checkFields();
  258.   },
  259.  
  260.   onCaptchaLoaded: function () {
  261.     this._captchaChallenge = this.captchaBrowser.contentDocument.getElementById("recaptcha_challenge_field").value;
  262.   },
  263.  
  264.   // sets class and string on a feedback element
  265.   // if no property string is passed in, we clear label/style
  266.   _setFeedbackMessage: function (element, success, string) {
  267.     element.hidden = success;
  268.     let label = element.firstChild.nextSibling;
  269.     label.className = success ? "success" : "error";
  270.     let str = "", classname = "";
  271.     if (string) {
  272.       str = this.bundle.getString(string);
  273.       classname = success ? "success" : "error";
  274.     }
  275.     label.value = str;
  276.     label.className = classname;
  277.   },
  278.  
  279.   QueryInterface: function (aIID) {
  280.     if (aIID.equals(Ci.nsIWebProgressListener) ||
  281.         aIID.equals(Ci.nsISupportsWeakReference) ||
  282.         aIID.equals(Ci.nsISupports))
  283.       return this;
  284.     throw Cr.NS_NOINTERFACE;
  285.   },
  286.  
  287.   onStateChange: function(webProgress, request, stateFlags, status) {
  288.     if (stateFlags & Ci.nsIWebProgressListener.STATE_STOP)
  289.       this.onCaptchaLoaded();
  290.   },
  291.   onProgressChange: function() {},
  292.   onStatusChange: function() {},
  293.   onSecurityChange: function() {},
  294.   onLocationChange: function () {}
  295. }
  296.